Skip to main content

Docker Compose & Profiles ๐Ÿ“ฆ

โš ๏ธ Local development only. This stack is not production-ready (Keycloak runs in start-dev, demo/admin credentials, no secret validation). For production, a separate Postgres-based path exists under docker/ โ€” it is a different artifact.

The local environment is a single docker-compose.yml at the repo root. Optional capabilities are turned on with Compose profiles instead of juggling many -f files.

๐Ÿ—๏ธ Always-on core (no profile)โ€‹

Started by every docker compose up:

ServicePurpose
mongodbCase data store
keycloakIdentity / OAuth2 (port 8082)
opaAuthorization policy engine
minioObject storage for attachments
storage-apiFile storage service (port 8085)
camundaCamunda 7 workflow engine (port 8080)
case-engine-rest-apiCore case API (port 8081)
c7-external-tasksCamunda 7 external-task workers

This is the minimum working environment.

๐Ÿงฉ Optional profilesโ€‹

Enable with --profile <name> (or via COMPOSE_PROFILES in .env):

ProfileAddsWhat it gives you
portal (default)case-portalThe React UI on port 3001
demo (default)demo-data-loaderOne-shot loader that bootstraps the Keycloak realm/clients/demo user needed to log in and seeds sample cases, forms, and processes, then exits. Without it the portal has no realm/user to authenticate against.
notificationskafka, zookeeper, email-sender, websocket-publisher, novu-publisherEvent bus + email / websocket / Novu notifications. Set KAFKA_ENABLED=true so the engine publishes.
proxytraefikReverse proxy / dashboard (port 8888)
docker compose up -d # core + portal + demo seed (login-ready)
COMPOSE_PROFILES=portal docker compose up -d # portal, NO seed (can't log in until seeded)
COMPOSE_PROFILES= docker compose up -d # backend only (run portal via yarn)
KAFKA_ENABLED=true docker compose --profile portal --profile demo --profile notifications up -d
docker compose down # stop (keeps data volumes)

๐Ÿ–ผ๏ธ Images vs. building from sourceโ€‹

Every app service has both an image: (pulled from the public GHCR registry, ghcr.io/wkspower/*) and a build:. So:

  • docker compose up -d pulls pre-built images โ€” no Java/Node build, no Maven.
  • docker compose up -d --build compiles from source (multi-stage Docker builds; no host Maven needed either).

Pin the image tag with WKS_VERSION in .env (default: the latest release).

๐Ÿ”Œ Advanced overlayโ€‹

  • docker-compose.camunda-kafka-plugin.yaml โ€” adds the in-engine Camunda plugin that also emits human-task-created events. Requires building the plugin jar first; see the file header for the exact commands.

๐Ÿงช Camunda 8 (experimental)โ€‹

Camunda 8 is outdated and unsupported โ€” its files live under experimental/camunda8/ with their own README. Camunda 7 (above) is the supported engine.